package com.kang.c0c.symbol;

import com.kang.c0c.optimize.Address;

/**
 * 类Symbol以javaBean的形式定义了简单的符号表内的某一项符号
 * 
 * @field
 * pos			：符号标识符定义的源代码位置
 * name			：符号标识符的名字
 * kind			：符号标识符的类型
 *
 * 另外它向外提供了四个静态方法来判断此符号的类型
 * isConstant	:判断sym是否为常量标识符
 * isVar		:判断sym是否为变量标识符
 * isParam		:判断sym是否为函数参数标识符
 * isFunc		:判断sym是否为用户自定义标识符
 *
 * @author kang
 *
 * Feb 7, 2009
 */
public class Symbol implements Kinds{
	
	public void setName(String name) {
		this.name = name;
	}

	public static boolean isConstant(Symbol sym){
		if((sym.kind&CONST) == CONST)
			return true;
		return false;
	}
	
	public static boolean isParam(Symbol sym){
		if((sym.kind&PARAM) == PARAM)
			return true;
		return false;
	}
	
	public static boolean isVar(Symbol sym){
		if((sym.kind&VAR) == VAR)
			return true;
		return false;
	}
	
	public static boolean isFunc(Symbol sym){
		if((sym.kind&FUNC) == FUNC)
			return true;
		return false;
	}
	
	private int pos;
	private String name;
	private int kind;
	
	public Address addr;
	private int use;
	
	public int getUse() {
		return use;
	}

	public void incUse() {
		this.use ++;
	}
	
	public void decUse(){
		this.use --;
	}

	public Symbol(int pos,String name,int kind){
		this.pos = pos;
		this.name = name;
		this.kind = kind;
		
		this.addr = null;
	}
	
	public int getPos() {
		return pos;
	}
	
	public String getName() {
		return name;
	}

	public void setPos(int pos) {
		this.pos = pos;
	}
}